<?php
/**
 * clase_zen_POA.php
 * @author Juan Belon
 * @access public
 * @copyright LGPL, GPL
 * @package zen_POA
 * @version 0.1.1
 * @uses zenphp FrameWork
 * @link http://csl2-zenphp.forja.rediris.es
 * @link http://www.zenphp.es
 * @link https://forja.rediris.es/projects/csl2-zenphp/
 * @magic Clase principal POA
 * TODO: Completar la Documentación de las clases de POA
 */
// +----------------------------------------------------------------------
// | zenphp.es
// +----------------------------------------------------------------------
require_once "clase_zen_POA_PicaCodigo.php";
require_once "clase_zen_POA_Compilador.php";
require_once "clase_zen_POA_Tejedora.php";
/**
* @desc Clase del Paradigma de la Programación Orientada a Aspectos
*/
class zen_POA
{    
    /**
    * @desc 
    */
	function COMPACTAR($v = null)
	{
		// Emulacion de una propiedad estatica en PHP4
		static $compacto = true;

		if ($v !== null) {
			$compacto = (boolean) $v;
		}

		return $compacto;
	}
    /**
    * @desc 
    */
	function RECOMPILAR($v = null)
	{
		// Emulacion de una propiedad estatica en PHP4
		static $recompilado = false;

		if ($v !== null) {
			$recompilado = (boolean) $v;
		}
		
		return $recompilado;
	}
	
	
	function CACHE($v = null)
	{
		// Emulacion de una propiedad estatica en PHP4
		static $cache = "";

		if ($v !== null && is_dir($v)) {
			$cache = (string) $v;
		}

		return $cache;
	}
	
	
	function compilar($ruta_fichero, $ruta_fichero_compilado, $tejedora_del_destino)
	{
		// Obtener contenidos del fichero:
		$contenido_fichero = implode("", file($ruta_fichero));
		
		$compilador = new zen_POA_Compilador($contenido_fichero, $tejedora_del_destino);
		$compilador->compilar(zen_POA::COMPACTAR());

		// Guardar fichero:
		if (!$fp = fopen($ruta_fichero_compilado, "w")) {
			trigger_error(
				_("<b>[Error de Aspectos]:</b> El Fichero <b>") . $ruta_fichero_compilado . _("</b> [Del Original: <b>") . $ruta_fichero . _("</b>] no pudo ser cargado/creado para escribir!"),
				E_USER_ERROR
			);
		}

		if (!fwrite($fp, $compilador->obtenerCodigo())) {
        	trigger_error(
				_("<b>[Error de Aspectos]:</b> No se pudo escribir los datos compilados en el fichero <b>") . $ruta_fichero_compilado . _(" [Del Original: <b>") . $ruta_fichero . "</b>]</b>!",
				E_USER_ERROR
			);
		}
		
		fclose($fp);
	}
}

?>